<?
/*
-------------------------------
Script - EvaGb
-------------------------------
File - tpl.class.php
-------------------------------
Function - Класс для работы с шаблонами
-------------------------------
*/
class tpl {
public $tpldir,$opt;
private $vars,$tplcache,$globalvars,$cachedir;
  function __construct($tpldir,$opt) {
       $this->tpldir=$tpldir;
       $this->opt=$opt;
       $this->cachedir=$GLOBALS['_gb_cnf']['dir']."/sis/cache";
       if ($opt['cache_dir'])$this->cachedir=$opt['cache_dir'];
  }
  function set($name,$value=0) {
      if (!is_array($name)) {
          $this->vars[$name]=$value;
      }else if(is_array($name) && count($name)) {
          foreach($name as $key=>$val) {
              $this->vars[$key]=$val;
          }
      }else {
          trigger_error("Ошибка: Не указано значение переменной", E_USER_ERROR);
      }
  }
  function set_global($name,$value=0) {
      if (!is_array($name)) {
          $this->globalvars[$name]=$value;
      }else if(is_array($name) && count($name)) {
          foreach($name as $key=>$val) {
              $this->globalvars[$key]=$val;
          }
      }else {
          trigger_error("Ошибка: Не указано значение переменной", E_USER_ERROR);
      }
  }
  function load($tplname,$cacheon=false) {
       if (!$this->tplcache[$tplname]) {
           $fp=@file_get_contents($this->tpldir.'/'.$tplname);
           if ($fp) {
               $fp=get_magic_quotes_gpc()?stripslashes($fp):$fp;
               $this->tplcache[$tplname]=$fp;
           }
       }else {
           $fp=$this->tplcache[$tplname];
       }
       if (!$fp) trigger_error("Ошибка: Шаблон ".$this->tpldir.'/'.$tplname." не найден",E_USER_ERROR);
       @ob_start();
        if ($this->vars) extract($this->vars);
        $_GLOBALS=$this->globalvars;
        eval("?".">".$fp."<?");
       $res=ob_get_contents();
       ob_clean();
       if ($this->opt['cache_on'] || $cacheon) $this->cache_save($tplname,$res);
       return $res;
  }
  function clear() {
      $this->vars=array();
  }
  function is_cached($tplname) {
    $fd=$this->cachedir.'/'.md5($tplname).'.ch';
    if (file_exists($fd) && time()-filemtime($fd)<=$this->opt['cache_time']){
        return true;
    }else{
        if (file_exists($fd)) unlink($fd);
        return false;
    }
  }
  
  function get_cache($tplname) {
    $fd=$this->cachedir.'/'.md5($tplname).'.ch';
    $fp=file_get_contents($fd);
    $fp=get_magic_quotes_gpc()?stripslashes($fp):$fp;
    return $fp;
  }
  function clear_cache($tplname) {
    $fd=$this->cachedir.'/'.md5($tplname).'.ch';
    return @unlink($fd);
  }
  private function cache_save($tplname,$res) {
      if (@file_put_contents($this->cachedir.'/'.md5($tplname).".ch",$res)) {
      }else {
         trigger_error("Ошибка: Не могу кешировать шаблон $tplname в папку ".$this->cachedir,E_USER_ERROR);
      }
  }
}
?>
